#include "main.h"

/*
 * funcs:   使能IMX6ULL所有外设时钟 
 * para :   无
 * return:  无
 */
void clk_enable(void)
{
    CCM_CCGR0 = 0xffffffff;
    CCM_CCGR1 = 0xffffffff;
    CCM_CCGR2 = 0xffffffff;
    CCM_CCGR3 = 0xffffffff;
    CCM_CCGR4 = 0xffffffff;
    CCM_CCGR5 = 0xffffffff;   
    CCM_CCGR6 = 0xffffffff;
}

/*
 * funcs:   LED相关引脚的GPIO初始化
 * para :   无
 * return:  无
 */
void led_init(void)
{
    /*1.初始化IO复用，即IO功能选择*/
    SW_MUX_GPIO1_IO03 = 0x5;    //GPIO1_IO03选择ALT5,即作为普通IO
    /*2.初始化IO功能，即IO功能配置*/
    SW_PAD_GPIO1_IO03 = 0X10B0; //
    /*3.初始化GPIO1_IO03配置*/
    GPIO1_GDIR = 0X0000008;
    /*4.初始化输出电平,默认为低，LED亮*/
    GPIO1_DR = 0X0;
}

/*
 * funcs:   LED亮
 * para :   无
 * return:  无
 */
void led_on(void)
{
    /*将GPIO1_DR的bit3清零*/
    GPIO1_DR &= ~(1<<3);
}

/*
 * funcs:   LED灭
 * para :   无
 * return:  无
 */
void led_off(void)
{
    /*将GPIO1_DR的bit3置1*/
    GPIO1_DR |= (1<<3);
}

/*
 * funcs:   短时间延时函数
 * para :   延时次数，即空操作次数
 * return:  无
 */
void delay_shaort(volatile unsigned int n)
{
    while(n--){}
}

/*
 * funcs:   ms延时函数，在396M主频下约为1ms
 * para :   延时时间，单位为ms
 * return:  无
 */
void delay_ms(volatile unsigned int n)
{
    while(n--)
    {
        delay_shaort(0x7ff);
    }
}

/*
 * funcs:   main函数
 * para :   无
 * return:  无
 */
int main (void)
{
    clk_enable();
    led_init();

    while (1)
    {
        led_off();
        delay_ms(500);
        led_on();
        delay_ms(500);        
    }
    

    return 0;
}